package com.ruoyi.fault.mapper;

import java.util.List;
import com.ruoyi.fault.domain.FaultRepair;
import com.ruoyi.fault.domain.FaultAssign;
import org.apache.ibatis.annotations.Param; // 根据需要导入，如果方法参数名与XML中不同，或者有多个参数，可以使用@Param注解

/**
 * 故障处理Mapper接口
 *
 * @author silence
 * @date 2025-07-21
 */
public interface FaultRepairMapper
{
    /**
     * 查询故障处理
     *
     * @param id 故障处理主键 (fault_repair.id)
     * @return 故障处理
     */
    public FaultRepair selectFaultRepairById(Long id);

    /**
     * 查询故障处理列表
     *
     * @param faultRepair 故障处理对象，包含查询条件
     * @return 故障处理集合
     */
    public List<FaultRepair> selectFaultRepairList(FaultRepair faultRepair);

    /**
     * 新增故障处理
     *
     * @param faultRepair 故障处理对象
     * @return 结果（受影响的行数）
     */
    public int insertFaultRepair(FaultRepair faultRepair);

    /**
     * 修改故障处理
     *
     * @param faultRepair 故障处理对象
     * @return 结果（受影响的行数）
     */
    public int updateFaultRepair(FaultRepair faultRepair);

    /**
     * 根据ID删除单条故障处理记录
     *
     * @param id 故障处理主键 (fault_repair.id)
     * @return 结果（受影响的行数）
     */
    public int deleteFaultRepairById(Long id);

    /**
     * 批量删除故障处理记录
     *
     * @param ids 需要删除的故障处理主键集合 (fault_repair.id 数组)
     * @return 结果（受影响的行数）
     */
    public int deleteFaultRepairByIds(Long[] ids);

    /**
     * 批量新增维修人员分配记录
     *
     * @param faultAssignList 维修人员分配列表
     * @return 结果（受影响的行数）
     */
    public int batchFaultAssign(List<FaultAssign> faultAssignList);

    // --- 以下是与 fault_assign 表相关的删除方法 ---

    /**
     * 根据故障报告ID (report_id) 删除关联的维修人员分配信息。
     * 此方法会通过 JOIN fault_repair 表来查找对应的 fault_assign 记录。
     * 主要用于通过报告ID级联删除分配信息，**不直接使用 fault_repair 的主键ID**。
     *
     * @param reportId 故障报告ID (fault_repair.report_id)
     * @return 结果（受影响的行数）
     */
    public int deleteFaultAssignByReportId(Long reportId);

    /**
     * 批量根据故障报告ID (report_id) 删除关联的维修人员分配信息。
     * 此方法会通过 JOIN fault_repair 表来查找对应的 fault_assign 记录。
     * 主要用于通过报告ID批量级联删除分配信息，**不直接使用 fault_repair 的主键ID**。
     *
     * @param reportIds 故障报告ID集合 (fault_repair.report_id 数组)
     * @return 结果（受影响的行数）
     */
    public int deleteFaultAssignByReportIds(Long[] reportIds);

    /**
     * !!!新增!!!
     * 根据故障处理主键ID (repair_id) 删除关联的维修人员分配信息。
     * 此方法直接根据 fault_assign 表中的 repair_id 字段进行删除。
     * 主要用于在新增或更新 FaultRepair 后清空旧的分配，以及删除单条 FaultRepair 时删除其关联的分配。
     *
     * @param repairId 故障处理主键ID (fault_repair.id，对应 fault_assign.repair_id)
     * @return 结果（受影响的行数）
     */
    public int deleteFaultAssignByRepairId(Long repairId);

    /**
     * !!!新增!!!
     * 批量根据故障处理主键ID (repair_ids) 删除关联的维修人员分配信息。
     * 此方法直接根据 fault_assign 表中的 repair_id 字段进行删除。
     * 主要用于在批量删除 FaultRepair 时删除其关联的分配。
     *
     * @param repairIds 故障处理主键ID集合 (fault_repair.id 数组，对应 fault_assign.repair_id 数组)
     * @return 结果（受影响的行数）
     */
    public int deleteFaultAssignByRepairIds(Long[] repairIds);
}
